/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.tesoreria.beans;

import cip.util.PaginacionFiltro;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.tesoreria.bc.SerieDocPagoDelegate;
import org.cip.esymons.tesoreria.be.EnumEstadoSerie;
import org.cip.esymons.tesoreria.be.SerieDocPago;
import org.cip.esymons.tramite.be.TipoDocumento;

/**
 *
 * @author Ingrid Capuñay
 */
public class SerieDocPagoController {
    private SerieDocPagoDelegate delegado;
    
    private SerieDocPago serieDocPago;
    private MiPaginador paginador;
   

    public SerieDocPagoController() {
        delegado=new SerieDocPagoDelegate();
       
        paginador = new MiPaginador<SerieDocPago>(null, 20);
        paginador.setFilter("");

    }
    /**
     * @return the serieDocPago
     */
    public SerieDocPago getSerieDocPago() {
        return serieDocPago;
    }
    /**
     * @param serieDocPago the serieDocPago to set
     */
    public void setSerieDocPago(SerieDocPago serieDocPago) {
        this.serieDocPago = serieDocPago;
    }
    public MiPaginador getPaginador() {
        return paginador;
    }
    /**
     * @param paginador the paginador to set
     */
    public void setPaginador(MiPaginador paginador) {
        this.paginador = paginador;
    }
   
    public final class MiPaginador<k> extends PaginacionFiltro {
        private  TipoDocumento td = null;
        private  EnumEstadoSerie estadoTd=null;

        public MiPaginador(String action, int cantidad) {
            super(action, cantidad);           
        }

        @Override
        public int contar() throws Exception {
            try {

                return delegado.contarPaginadorSerieDocsPago(td,estadoTd);
            } catch (Exception e) {
                return 0;
            }
        }

        @Override
        public List listar() throws Exception {
            try {
                return delegado.paginadorSerieDocsPago(getPaginador().getCantidadxPagina(), getPaginador().getPosicion(), td,estadoTd);
            } catch (Exception e) {
                return new ArrayList();
            }
        }

        public TipoDocumento getTd() {
            return td;
        }

        public void setTd(TipoDocumento valor) {
            try {
                if (!valor.equals(td)) {
                    td = valor;
                    reset();
                }
            } catch (Exception ex) {
                td = null;
            }
        }

        /**
         * @return the estadoTd
         */
        public EnumEstadoSerie getEstadoTd() {
            return estadoTd;
        }

        /**
         * @param estadoTd the estadoTd to set
         */
        public void setEstadoTd(EnumEstadoSerie valor) {
           try {
                if (!valor.equals(estadoTd)) {
                    estadoTd = valor;
                    reset();
                }
            } catch (Exception ex) {
                estadoTd = null;
            }
        }
     }

    public String nuevo(){
        serieDocPago = new SerieDocPago();
       
        return "nuevo";
    }

    public String grabar(){
        serieDocPago.setSerEstado(EnumEstadoSerie.VIGENTE);
        delegado.create(serieDocPago);
        paginador.reset();
        ControladorAbstracto.info("Se insertó satisfactoriamente la Serie del Documento.");
        return "buscar";
    }

    public String buscar(){
        paginador.reset();
        return null;
    }

    public String actualizar(){
        delegado.edit(serieDocPago);        
        paginador.reset();
        ControladorAbstracto.info("Se actualizó satisfactoriamente la Serie del Documento.");
        return "buscar";
    }
    public String anular(){
        
        serieDocPago.setSerEstado(EnumEstadoSerie.ANULADA);
        delegado.edit(serieDocPago);
        paginador.reset();
        return null;
    }

    public SelectItem[] getEstadoSerieItem(){
        try{
            SelectItem[] select = new SelectItem[EnumEstadoSerie.values().length];            
            int cont=0;
            for(EnumEstadoSerie e:EnumEstadoSerie.values()){
                select[cont] = new SelectItem(e, e.name());
                cont++;
            }
            return select;
        }catch(Exception ex){
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen estados");
            return select;
        }
    }
}
